A cyclical redundancy check (CRC) is a type of function that is used to detect errors in digital data. A typical n-bit CRC (e.g., CRC-8, CRC-16, CRC-32, etc.) receives a data block as input represented as a binary value. The binary value is then divided by a predetermined n-bit binary divisor to generate a remainder that is characteristic of the data block. The remainder may be used as a checksum to determine, for example, if the data block is later altered during transmission or storage.
In the field of data communications, network protocols such as Ethernet, ATM, and the like employ CRCs to detect transmission errors in messages (i.e., data packets or frames) that are sent from one network device to another. For example, in a conventional Ethernet implementation, a transmitting network device (e.g., router, switch, host network interface, etc.) generates a CRC-32 value for each outgoing Ethernet frame, and appends the value to the frame prior to transmission. When the frame is received at a receiving network device, the CRC-32 value is stripped and a new CRC-32 value is generated for the frame. The new CRC-32 value is then compared to the received CRC-32 value to verify the integrity of the data contained within the frame. However, conventional CRC processing circuit implementations cannot efficiently support the high data throughput rates demanded by emerging wire transmission standards, such as 100 G (i.e., 100 Gigabits per second (Gbps)) Ethernet.